package com.xh.demo.client;

import com.github.lianjiatech.retrofit.spring.boot.annotation.RetrofitClient;
import com.xh.demo.commons.model.Result;
import com.xh.demo.model.table.User;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.http.GET;
import retrofit2.http.Query;

import java.util.concurrent.CompletableFuture;


@RetrofitClient(baseUrl = "${retrofit.api.baseUrl}")
public interface MultiHttpApi {

    @GET("user")
    String getUser(@Query("id") Long id);

    /**
     * Call<T>
     * 不执行适配处理，直接返回Call<T>对象
     */
    @GET("user")
    Call<Result<User>> getUserCall(@Query("id") Long id);

    /**
     * CompletableFuture<T>
     * 将响应体内容适配成CompletableFuture<T>对象返回
     */
    @GET("user")
    CompletableFuture<Result<User>> getUserCompletableFuture(@Query("id") Long id);

    /**
     * Void
     * 不关注返回类型可以使用Void。如果http状态码不是2xx，直接抛错！
     */
    @GET("user")
    Void getUserVoid(@Query("id") Long id);

    /**
     * Response<T>
     * 将响应内容适配成Response<T>对象返回
     */
    @GET("user")
    Response<Result<User>> getUserResponse(@Query("id") Long id);

    /**
     * 其他任意Java类型
     * 将响应体内容适配成一个对应的Java类型对象返回，如果http状态码不是2xx，直接抛错！
     */
    @GET("user")
    Result<User> getUserV2(@Query("id") Long id);

}